
export const FromBuildConfigMixins = {
  computed: {},
  data() {
    return {
    }
  },
  created() {
  },
  methods: {
    /** 将主子表关联字段，设置为不可编辑状态 **/
    dealFormBuildConfig(fromData,formDataOptions,formBuildConfigs){
      let that = this
      let isFind = false;
      function findColumn(formBuildConfig){
        if(Array.isArray(formBuildConfigs)){
          for (let field of formBuildConfig) {
            /** 将表单数据添加到组件对象中 取表单中的值 **/
            that.dealFieldValue(fromData,formDataOptions,field)
            /** 将主子表关联字段，设置为不可编辑状态 **/
            if (field && field['vModel'] == that.foreignKey) {
              field['disabled'] = true
              isFind = true;
            }
            if(field && field.children && Array.isArray(field.children) && field.children.length>0){
              field.children = findColumn(field.children)
            }
          }
        }else{
          /** 将表单数据添加到组件对象中 取表单中的值 **/
          that.dealFieldValue(fromData,formDataOptions,formBuildConfig)
        }
        return formBuildConfig;
      }
      return findColumn(formBuildConfigs)
    },
    /**
     * 将表单数据添加到组件对象中 取表单中的值
     * @param element
     */
    dealFieldValue(formData,formDataOptions,field) {

      let fieldValue = field.defaultValue || ''
      if(formData){
        /**
         * 将表单数据添加到组件对象中 取表单中的值
         */
        fieldValue = formData[field.vModel];
        if (this.strIsEmpty(fieldValue)) {
          // 取表单中的值为空时，取配置时的默认值
          fieldValue = this.strIsNotEmpty(field.defaultValue)?field.defaultValue:"";
        }
        // 同步组件数据（默认值的情况）到表单数据对象中
        formData[field.vModel] = fieldValue
        //记录当前表单记录唯一ID
        field['recordId'] = formData['defPk']
      }

      fieldValue = this.getFieldValueByType(field,fieldValue);
      field['defaultValue'] = fieldValue
      field['fieldValue'] = fieldValue
      /**
       * 处理配置信息中对应数据类型
       */
      this.initDealConfigDataType(field);
      /**
       * 处理表单字段校验规则
       */
      this.dealFieldRules(field)
      /**
       * 更新 下拉框、多选框、单选框 选项值
       */
      if(formDataOptions){
        this.refreshOptions(field,formDataOptions)
      }
    },
    /**
     * 根据不同的组件类型，处理对应的值
     * @param element
     * @param fieldValue
     * @returns {*[]|string[]|string|boolean|number|*}
     */
    getFieldValueByType(element,fieldValue){

      let moduleType= element['moduleType']

      if(moduleType === 'rate' || moduleType === 'number'){
        //评分
        return Number(fieldValue)
      }

      if(moduleType === 'slider'){
        //滑块
        if(element['range']){
          return String(fieldValue).split(",")
        }else{
          return Number(fieldValue)
        }
      }

      if(moduleType === 'switch' && typeof element['active-value'] == 'boolean'){
        //开关
        let val = String(fieldValue).toLowerCase()
        return val === 'true'?true:false
      }
      //多选、下拉框、多选框、穿梭框、地区级联选择
      if (this.dealBoolean(element['multiple']) || moduleType === 'checkbox' || moduleType === 'transfer' || moduleType === 'CascaderArea') {
        //以上几种组件需要数组
        if (typeof fieldValue === 'string') {
          return this.strIsEmpty(fieldValue)?[]:fieldValue.split(',')
        }
      }
      //当值不为对象、集合时，都统一返回字符型
      if(typeof fieldValue != "object"){
        return String(fieldValue)
      }
      return fieldValue;
    },
    /**
     * 处理配置信息中对应数据类型
     */
    initDealConfigDataType(element) {
      if(element){
        /** 初始化值配置信息中对应数据类型 **/
        let config = this.$store.state.component.componentConfig[element.moduleType];
        if(config){
          for (let key in config) {
            //处理boolean类型
            if (typeof config[key] === 'boolean') {
              let val = String(element[key]).toLowerCase()
              if(val === 'true' || val === 'false'){
                element[key] = val === 'true'?true:false
              }
            }

          }
        }
      }
    },
    /**
     * 处理表单字段校验规则
     */
    dealFieldRules(element) {
      let regList = []
      if(element.regList){
        /** 必填规则修改 **/
        regList = JSON.parse(JSON.stringify(element.regList))
      }
      if(this.dealBoolean(element['required'])){
        regList.push({required: true, message: element.label + '不能为空'})
      }
      element['_regList'] = regList
    },
    /**
     * 更新 下拉框、多选框、单选框 选项值
     */
    refreshOptions(element,formDataOptions) {
      /**
       * 同步选项值到element对象，或表单
       * 仅用于 下拉框、多选框、单选框
       */
      let moduleType= element['moduleType']
      if (moduleType == 'checkbox' || moduleType == 'radio' || moduleType == 'select') {
        let optionInfo = element.options
        if (formDataOptions[element.vModel] instanceof Array && formDataOptions[element.vModel].length > 0) {
          //将表单中选项值更新到element对象中
          optionInfo = formDataOptions[element.vModel]
          element['options'] = optionInfo
        } else {
          // 将element对象中默认选项值同步到表单中
          formDataOptions[element.vModel]=optionInfo
        }
      }
    },

  }
}
